package helpers;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;

public class StringHelper {
	public static String cutString(String description, int count) {
		String[] str = description.split(" ");
		int max = str.length;
		if (max >= count) {
			max = count;
		}
		description = "";
		
		for (int i = 0; i < max; i++) {
			description += str[i] + " ";
		}
		return description;
	}
	
	public static String getAlias(String str) {
		str = StringHelper.replaceVietnamese(str);
		str = StringHelper.replace(str);
		return str;
	}
	
	public static String replace(String str) {
		str = str.replaceAll("[\\W]+", "-");
		str = str.replaceAll("^-", "");
		str = str.replaceAll("-$", "");
		str = str.toLowerCase();
		return str;
	}

	public static String replaceVietnamese(String str) {
		String[] aArray = {"ấ", "ầ", "ẩ", "ẫ", "ậ", "Ấ", "Ầ", "Ẩ", "Ẫ", "Ậ", "ắ", "ằ", "ẳ", "ẵ", "ặ",
				"Ắ", "Ằ", "Ẳ", "Ẵ", "Ặ", "á", "à", "ả", "ã", "ạ", "â", "ă",
				"�?", "À", "Ả", "Ã", "Ạ", "Â", "Ă" };
		String[] eArray = { "ế", "�?", "ể", "ễ", "ệ", "Ế", "Ề", "Ể", "Ễ", "Ệ",
				"é", "è", "ẻ", "ẽ", "ẹ", "ê", "É", "È", "Ẻ", "Ẽ", "Ẹ", "�?" };
		String[] iArray = { "í", "ì", "ỉ", "ĩ", "ị", "�?", "Ì", "Ỉ", "Ĩ", "�?" };
		String[] oArray = { "ố", "ồ", "ổ", "ỗ", "ộ", "�?", "Ồ", "Ổ", "Ô", "Ộ",
				"ớ", "�?", "ở", "ỡ", "ợ", "�?", "Ờ", "�?", "Ỡ", "Ợ", "ó", "ò",
				"�?", "õ", "�?", "ô", "ơ", "Ó", "Ò", "�?", "Õ", "Ọ", "Ô", "Ơ" };
		String[] uArray = { "ứ", "ừ", "ử", "ữ", "ự", "Ứ", "Ừ", "Ử", "Ữ", "Ự",
				"ú", "ù", "ủ", "ũ", "ụ", "ư", "�?", "Ù", "Ủ", "Ũ", "Ụ", "Ư" };
		String[] yArray = { "ý", "ỳ", "ỷ", "ỹ", "ỵ", "�?", "Ỳ", "Ỷ", "Ỹ", "Ỵ" };
		String[] dArray = { "đ", "�?" };
		for (String item : aArray) {
			str = str.replaceAll(item, "a");
		}
		for (String item : eArray) {
			str = str.replaceAll(item, "e");
		}
		for (String item : iArray) {
			str = str.replaceAll(item, "i");
		}
		for (String item : oArray) {
			str = str.replaceAll(item, "o");
		}
		for (String item : uArray) {
			str = str.replaceAll(item, "u");
		}
		for (String item : yArray) {
			str = str.replaceAll(item, "y");
		}
		for (String item : dArray) {
			str = str.replaceAll(item, "d");
		}
		str = str.replaceAll("[\\W]+", " ");
		str = str.replaceAll("^-", "");
		str = str.replaceAll("-$", "");
		str = str.toLowerCase();
		return str;

	}

	public static String tag(String str) {
		str = str.replaceAll("\\#", "Sharp");
		str = str.replaceAll("\\+", "Plus");
		str = str.replaceAll("[^.\\w]+", "-");
		str = str.replaceAll("^-", "");
		str = str.replaceAll("-$", "");
		str = str.toLowerCase();
		return str;
	}

	public static String remove(String str) {
		str = str.replaceAll("[\'\"]+", "&quot;");
		return str;
	}

	public static boolean StringIsNullOrEmpty(String string) {
		if (string == null || string.equals("")) {
			return true;
		}
		return false;
	}
	
	public static ArrayList<String> findStrings(String regex, String input) {
		ArrayList<String> result = new ArrayList<String>();
		Pattern p = Pattern.compile(regex);
	    Matcher m = p.matcher(input); // get a matcher object
	     while(m.find()) {
	       result.add(input.substring(m.start(), m.end()));
	    }
		return result;
	}
	
	public static String findString(String regex, String input) {
		ArrayList<String> result = findStrings(regex, input);
		String str = "";
		if (result.size() > 0) {
			str = result.get(0);
		}
		return str;
	}
	
	public static String html2text(String html) {
		return Jsoup.parse(html).text();
	}
	
	public static String text2UTF8(String str) {
		byte[] utf8bytes = str.getBytes();
		return new String(utf8bytes,Charset.forName("UTF-8"));
	}
	
	public static String arrayToString(String[] a, String separator) {
	    if (a == null || separator == null) {
	        return null;
	    }
	    StringBuilder result = new StringBuilder();
	    if (a.length > 0) {
	        result.append(a[0]);
	        for (int i=1; i < a.length; i++) {
	            result.append(separator);
	            result.append(a[i]);
	        }
	    }
	    return result.toString();
   }
	
  public static String arrayListToString(ArrayList<String> a, String separator) {
	  StringBuilder result = new StringBuilder();
	  if (a.size() > 0) {
		  result.append(a.get(0));
		  for (int i = 1; i < a.size(); i++) {
			  result.append(separator);
	          result.append(a.get(i));
		  }
	  }
	  return result.toString();
  }
  
  public static String listToString(List<String> str, String separator) {
	  StringBuilder result = new StringBuilder();
	  if (str.size() > 0) {
		  result.append(str.get(0));
		  for (int i = 1; i < str.size(); i++) {
			  result.append(separator);
	          result.append(str.get(i));
		  }
	  }
	  return result.toString();
  }
  
  public static String cleanContent(String str) {
		str = str.replaceAll(
				"(class|id)[ ]*[=]{1}[ ]*[\\'\\\"]{1}[^\\'\\\"]+[\\'\\\"]{1}",
				"");
		str = str.replaceAll("<script[^<]+</script[ ]*>", "");
		return str;
	}
}
